return -1;
}
+ struct imap_parser_params params = {
+ .list_count_limit = IMAP_LOGIN_LIST_COUNT_LIMIT,
+ };
imap_client->parser =
imap_parser_create(imap_client->common.input,
imap_client->common.output,
- IMAP_LOGIN_MAX_LINE_LENGTH, NULL);
+ IMAP_LOGIN_MAX_LINE_LENGTH, ¶ms);
struct settings_instance *set_instance = settings_instance_find(client->event);
if (set_instance == NULL) {
set_instance = settings_instance_new(
struct imap_client *imap_client =
container_of(client, struct imap_client, common);
+ struct imap_parser_params params = {
+ .list_count_limit = IMAP_LOGIN_LIST_COUNT_LIMIT,
+ };
imap_parser_unref(&imap_client->parser);
imap_client->parser =
imap_parser_create(imap_client->common.input,
imap_client->common.output,
- IMAP_LOGIN_MAX_LINE_LENGTH, NULL);
+ IMAP_LOGIN_MAX_LINE_LENGTH, ¶ms);
/* CRLF is lost from buffer when streams are reopened. */
imap_client->skip_line = FALSE;
/* maximum length for IMAP command line. */
#define IMAP_LOGIN_MAX_LINE_LENGTH 8192
+/* Maximum number of '(' allowed in an IMAP command. Pre-login only uses
+ lists in the ID command. */
+#define IMAP_LOGIN_LIST_COUNT_LIMIT 1
+
enum imap_client_id_state {
IMAP_CLIENT_ID_STATE_LIST = 0,
IMAP_CLIENT_ID_STATE_KEY,
client->cmd_id = id = i_new(struct imap_client_cmd_id, 1);
id->params = p_new(param_pool, struct imap_id_params, 1);
id->params->pool = param_pool;
+
+ struct imap_parser_params params = {
+ .list_count_limit = IMAP_LOGIN_LIST_COUNT_LIMIT,
+ };
id->parser = imap_parser_create(client->common.input,
client->common.output,
IMAP_LOGIN_MAX_LINE_LENGTH,
- NULL);
+ ¶ms);
id->log_reply = str_new(default_pool, 64);
if (client->set->imap_literal_minus)
imap_parser_enable_literal_minus(id->parser);